import Vue from 'vue'

//创建store状态管理
import Vuex from 'vuex'
Vue.use(Vuex)
    //每当初始化项目的时候，就先从localStoreage中去一下数据
let car = window.JSON.parse(localStorage.getItem('cart') || '[]')

const store = new Vuex.Store({
    state: {
        //在cart中，应该把每个商品存储为一个对象，{id，count,selected，price}
        cart: car //挂载store
    },
    mutations: {
        addToCar(state, goods) {
            //将商品添加到购物车
            //如果购物车中之前有商品，更新数量，曾经没有，直接push
            // state.cart.push(godos)
            let flag = false
            state.cart.some(item => {
                    if (item.id == goods.id) {
                        //如果找到了对呀的商品，直接更新数据
                        item.count += goods.count
                        flag = true
                            //终止后续循环
                        return true;
                    }
                })
                //如果没找到，直接puush到购物车
            if (!flag) {
                state.cart.push(goods)
            }
            //为了持久化的数据 可以把购物车的商品序列化出来，存储到localstorage中
            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        },
        updateGoodsCount(state, goods) {
            // 根据传递过来的商品的信息，更新购物车商品的信息d
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count = goods.count
                    return true
                }
            })

            //为了持久化的数据 可以把购物车的商品序列化出来，存储到localstorage中
            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        },
        defFormCart(state, id) {
            //更加id删除vue商品
            state.cart.some((item, i) => {
                    if (item.id == id) {
                        state.cart.splice(i, 1)
                        return true
                    }
                })
                //为了持久化的数据 可以把购物车的商品序列化出来，存储到localstorage中
            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        }
    },
    getters: {
        totalcount(state) {
            //徽标中的数量
            let c = 0
                //getter的特性，只要依赖的数据变化了，必然重新计算getter 的值；
            state.cart.forEach(item => c += item.count)
            return c
        },
        idstr(state) {
            //获取购物车中所有的商品id字符串
            let arr = []
            state.cart.forEach(item => arr.push(item.id))
            return arr.join(',')
        },
        countObj(state) {
            // 获取购物车商品的id和商品数量对应的关系
            let o = {}
            state.cart.forEach(item => o[item.id] = item.count)
            return o
                //  88 : 3, 89:5 0[id]

        },
        selectedObj(state) {
            // id对应的商品是否呗选择
            let o = {}
            state.cart.forEach(item => o[item.id] = item.selected)
            console.log(o)
            return o
        },
        selectedcount(state) {
            // 勾选商品的数量 只有这一项选择，数量加起来
            let c = 0
            state.cart.forEach(item => {
                if (item.selected) {
                    c += item.count
                }
            })
            return c
        },
        amount(state) {
            // 总价
            let c = 0
            state.cart.forEach(item => {
                if (item.selected) {
                    c += item.count * item.price
                }
            })
            return c
        }
    }
})

export default store